package com.hyb.algorithm.data.struct.math;

/**
 * @BelongProject algorithm
 * @BelongPackage com.hyb.algorithm.data.struct.math
 * @Description
 *
 *
 *
/**
 * 样例1:
 * [输入]
 * 10 10
 * 0 1
 * 0 2
 * 0 3
 * 1 2
 * 1 3
 * 1 4
 * 2 3
 * 2 4
 * 2 5
 * 5 6
 * [输出]
 * 0
 * [说明]
 *
 * @return
 * @ClassName Graph
 * @Author huyangbing
 * @Date 2025/2/21 10:35
 * @Version 1.0.0
 */
public class Graph {


    public int n = 0;
    public int m = 0;

    private int[][] data;

    public Graph(int n, int m) {
        data = new int[n][m];
    }


    public void put(int u, int v, int val) {

        if (u >= n || v >= m) {
            throw new IllegalArgumentException("u ,v is out of  bound ");
        }

        data[u][v] = val;

    }


    public int checkRef(int u, int v) {

        if (u >= n || v >= m) {
            throw new IllegalArgumentException("u ,v is out of  bound ");
        }

        if (data[u][v] > 0 && data[v][u] > 0) {
            return 1;
        }

        return 0;

    }


    /**
     *  * 10 10
     *  * 0 1
     *  * 0 2
     *  * 0 3
     *  * 1 2
     *  * 1 3
     *  * 1 4
     *  * 2 3
     *  * 2 4
     *  * 2 5
     *  * 5 6
     * @param args
     *
     *  * @Description 判断是否存在循环引用
     *  * 使用引用计数来进行资源管理时，往往需要检测是否存在循环引用
     *  * 假设有n个元素，m个引用关系，每个引用关系(u, v)表示元素u引用了元素v，判断其中是否存在循环引用
     *  * <p>
     *  * 输入格式如下：
     *  * n m
     *  * u_0 v_0
     *  * ...
     *  * u_(m-1) v_(m-1)
     *  * <p>
     *  * u_1 v_1
     *  * <p>
     *  * 输出1或0，表示是否存在循环引用
     */
    public static void main(String[] args) {
        Graph graph=new Graph(10,10);

        graph.put(0,0,1);
        graph.put(1,0,1);

        System.out.println(graph.checkRef(5,5));
    }

}